《Linux – Linux高级编程 – 第三部分 网络编程》第1章 网络基础知识

1.1 OSI模型和TCP/IP 模型

网络体系结构指的是网络的分层结构以及每层使用的协议的集合。其中最著名的就是OSI协议参考模型,他是基于国际标准化组织(OSI)的建议发展起来的。它分为7个层次:应用层、表示层、会话层、传输层、网络层、数据链路层及物理层

gKH3Yn.png

图1

这个7层的协议模型规定的非常细致和完善,但在实际中没有被广泛的使用,其中最重要的原因之一就是它过于复杂。尽管如此,它仍是此后很多协议模型的基础。与此相区别的TCP/IP模型将OSI 的7层协议模型简化为4层,从而更有利于实现和高效通信。

TCP/IP 参考模型和OSI参考模型的对应关系如下:

gKHtyT.png

图2

下面具体讲解各层在TCP/IP 整体架构中的作用。

1)网络接口层
网络接口层(Network Interface Layer)是TCP/IP的最底层,负责将二进制流转化为数据帧,并进行数据帧的发送和接收。数据帧是网络传输的基本单元;

2)网络层
网络层(Internet Layer)负责在主机之间的通信中选择数据包的传输路径,即路由。当网络层接收到传输层的请求后,传输某个具有目的地址信息的分组。该层把分组封装在IP数据包中,填入数据包的首部,使用路由算法来确定是直接交付数据包,还是把它传递给路由器,最后把数据包交给适当的网络接口进行传输。

网络层还要负责处理传入的数据包,检验其有效性,使用路由算法来决定应对该数据包进行本地处理还是应该转发。

如果数据包的目的机处于本机所在的网络,该层软件就回去出数据包的首部,再选择适当的传输层协议来处理这个分组。最后,网络层还要根据需要发出和接手ICMP(Internet控制报文协议)差错和控制报文。

3)传输层
传输层(Transport Layer)负责实现应用程序之间的通信服务,这种通信又叫做端到端通信。传输层要系统地管理信息的流动,还要提供可靠的传输服务,以确保数据到达无差错、无乱序。为了达到这个目的,传输层协议软件要进行协商,让接收方会送确认信息及让发送方重发丢失的分组。传输层协议软件把要传输的数据流分为分组,把每个分组连同目的地址交给网络层去发送。

4)应用层
应用层(Application Layer)是分层模型的最高层。应用程序使用相应的应用层协议,把封装好的数据提交个传输层或是从传输层接收数据并处理。

表1
OSI中的层 功能 TCP/IP协议族
应用层 文件传输、电子邮件、文件服务、虚拟终端 TFIP、HTTP、SNMP、FTP、SMTP、DNS、Telnet
表示层 数据格式化、代码转换、数据加密 没有协议
会话层 解除或建立与别的节点的联系 没有协议
传输层 提供端对端的端口 TCP、UDP
网络层 为数据包选择路由 IP、ICMP、RIP、OSPF、BGP、IGMP
数据链路层 传输有地址的帧以及错误检测功能 SLIP、CSLIP、PPP、ARP、RARP、MTU
物理层 以二进制数据形式在物理媒体上传输数据 IOS2100、IEEE802.1、IEEE802.2

【注】
· ARP:用于获得同一物理网络中的硬件主机地址。
· MPLS:多协议标签协议,是很有发展前景的下一代网络协议。
· IP:负责在主机和网络之间寻址和路由数据包。
· ICMP:用于发送报告有关数据包的传送错误的协议。
· IGMP:被 IP 主机用来向本地多路广播路由器报告主机组成员的协议。
· TCP:为应用程序提供可靠的通信连接。适合于一次传输大批数据的情况。并适用于要求得到响应的应用程序。
· UDP:提供了无连接通信,且不对传送包进行可靠的保证。适合于一次传输少量数据,可靠性则由应用层来负责。

1.2 TCP/IP协议

TCP/IP是“transmission Control Protocol/Internet Protocol”的简写,中文译名为传输控制协议/互联网络协议)协议, TCP/IP(传输控制协议/网间协议)是一种网络通信协议,它规范了网络上的所有通信设备,尤其是一个主机与另一个主机之间的数据往来格式以及传送方式。

TCP/IP是INTERNET的基础协议,也是一种电脑数据打包和寻址的标准方法。在数据传送中,可以形象地理解为有两个信封,TCP和IP就像是信封,要传递的信息被划分成若干段,每一段塞入一个TCP信封,并在该信封面上记录有分段号的信息,再将TCP信封塞入IP大信封,发送上网。在接受端,一个TCP软件包收集信封,抽出数据,按发送前的顺序还原,并加以校验,若发现差错,TCP将会要求重发。因此,TCP/IP在INTERNET中几乎可以无差错地传送数据。 对普通用户来说,并不需要了解网络协议的整个结构,仅需了解IP的地址格式,即可与世界各地进行网络通信。

gKHbX8.png

图3TCP/IP协议通信模型

gKHvkj.png

图4 TCP/IP结构

1.3 TCP和UDP

1)TCP
TCP向应用层提供可靠的面向链接的数据流传输服务。它能提供可靠性通信(数据无误、数据无丢失、数据无失序、数据无重复到达)。

通过源/目的的IP可以唯一地区分网络中两个设备,再通过源/目的的端口可以唯一地区分网络中两个通信的应用程序。

 三次握手协议

TCP会话通过三次握手来初始化。三次握手的目标是使数据段的发送和接收同步。同时也向其他主机表明其一次可接收的数据量(窗口大小),并建立逻辑连接。这三次握手的过程可以简述如下:  
●源主机发送一个同步标志位(SYN)置1的TCP数据段。此段中同时标明初始序号(Initial Sequence Number,ISN)。ISN是一个随时间变化的随机值。  
●目标主机发回确认数据段,此段中的同步标志位(SYN)同样被置1,且确认标志位(ACK)也置1,同时在确认序号字段表明目标主机期待收到源主机下一个数据段的序号(即表明前一个数据段已收到并且没有错误)。此外,此段中还包含目标主机的段初始序号。  
●源主机再回送一个数据段,同样带有递增的发送序号和确认序号。  

至此为止,TCP会话的三次握手完成。接下来,源主机和目标主机可以互相收发数据。

gKbn91.png

图5

2)UDP
UDP即用户数据报协议,是一种面向无连接的不可靠传输协议,具有资源消耗少、处理速度快的特点。

 适用情况:
发送小尺寸数据(如对DNS服务器进行IP地址查询时);

流媒体等网络多媒体服务中通常会采用UDP方式进行实时数据传输;

1.4 IP地址

IP地址是指互联网协议地址(英语:Internet Protocol Address,又译为网际协议地址),是IP Address的缩写。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。

1)IP地址类型
公有地址:公有地址(Public address)由Inter NIC(Internet Network Information Center因特网信息中心)负责。这些IP地址分配给注册并向Inter NIC提出申请的组织机构。通过它直接访问因特网。

私有地址:私有地址(Private address)属于非注册地址,专门为组织机构内部使用。
以下列出留用的内部私有地址
A类 10.0.0.0–10.255.255.255
B类 172.16.0.0–172.31.255.255
C类 192.168.0.0–192.168.255.255

2)IP地址分类
初设计互联网络时,为了便于寻址以及层次化构造网络,每个IP地址包括两个标识码(ID),即网络ID和主机ID。同一个物理网络上的所有主机都使用同一个网络ID,网络上的一个主机(包括网络上工作站,服务器和路由器等)有一个主机ID与其对应。Internet委员会定义了5种IP地址类型以适合不同容量的网络,即A类~E类。

其中A、B、C3类(如下表格)由InternetNIC在全球范围内统一分配,D、E类为特殊地址。

表2

gKbU3t.png

gKbagP.png

图6

A类IP地址
一个A类IP地址是指, 在IP地址的四段号码中,第一段号码为网络号码,剩下的三段号码为本地计算机的号码。如果用二进制表示IP地址的话,A类IP地址就由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”。A类IP地址中网络的标识长度为8位,主机标识的长度为24位,A类网络地址数量较少,有126个网络,每个网络可以容纳主机数达1600多万台。

A类IP地址 地址范围1.0.0.0到127.255.255.255 (二进制表示为:00000001 00000000 00000000 00000000 – 01111110 11111111 11111111 11111111)。最后一个是广播地址。

A类IP地址的子网掩码为255.0.0.0,每个网络支持的最大主机数为256的3次方-2=16777214台。

B类IP地址

一个B类IP地址是指,在IP地址的四段号码中,前两段号码为网络号码。如果用二进制表示IP地址的话,B类IP地址就由2字节的网络地址和2字节主机地址组成,网络地址的最高位必须是“10”。B类IP地址中网络的标识长度为16位,主机标识的长度为16位,B类网络地址适用于中等规模的网络,有16384个网络,每个网络所能容纳的计算机数为6万多台。

B类IP地址地址范围128.0.0.0 -191.255.255.255(二进制表示为:10000000 00000000 00000000 00000000—-10111111 11111111 11111111 11111111)。 最后一个是广播地址。

B类IP地址的子网掩码为255.255.0.0,每个网络支持的最大主机数为256的2次方-2=65534台。

C类IP地址
一个C类IP地址是指,在IP地址的四段号码中,前三段号码为网络号码,剩下的一段号码为本地计算机的号码。如果用二进制表示IP地址的话,C类IP地址就由3字节的网络地址和1字节主机地址组成,网络地址的最高位必须是“110”。C类IP地址中网络的标识长度为24位,主机标识的长度为8位,C类网络地址数量较多,有209万余个网络。适用于小规模的局域网络,每个网络最多只能包含254台计算机。
C类IP地址范围192.0.0.0-223.255.255.255[3] (二进制表示为: 11000000 00000000 00000000 00000000 – 11011111 11111111 11111111 11111111)。

C类IP地址的子网掩码为255.255.255.0,每个网络支持的最大主机数为256-2=254台。

1.5数据链路层——最大传输单元MTU

数据链路层的以太网帧结构:

gKbyNj.png

图7

以太网帧结构由四个字段组成,各字段含义为:

目的地址:该地址指的是MAC地址,指该数据要发送至哪里
源地址:MAC地址,填本地MAC地址,指该数据从哪里来
类型:值该数据要交给上层(网络层)的那个协议(IP协议,ARP协议…)
数据:要传输的数据,不过该数据有长度的要求,是在46–1500字节之间,该长度称为最大传输单元即MTU。

若数据长度不够46字节,则需要填充内容;若数据长度超过1500字节,则需要分片传输。

MTU形象理解传输中数据的长度限制,以寄送快递为例:

gKb4DU.png

图8

1500字节就是在传输过程中的最大传输单元,也称为MTU,是指在传输数据过程中允许报文的最大长度。

MTU对IP协议的影响
(1)IP报文在超过MTU后需要分片,接收端需要组装;
(2)一旦分片后的IP报文有一部分丢失,则接收端组装会失败,对于整个P报文而言相当于传输失败,而IP协议不会负责重新传输数据;
(3)由于MTU影响的IP报文的分片和组装会加大报文丢失的可能性;
(4)报文的分片和组装由IP层自己做,会加大传输的成本,降低性能。

 MTU对UDP协议的影响
(1)UDP协议的报头为固定的20字节;
(2)若UDP数据的长度超过(1500-20)1480字节,则数据在网络层会分片;
(3)数据的分片会加大数据丢失的可能性。

 MTU对TCP协议的影响
(1)TCP协议的报头长度为20–60字节;
(2)若TCP报文的总长度超过1500字节,则数据同样在网络层会分片;
(3)TCP单个数据报的最大长度称为最大段尺寸MSS;
(4)在TCP三次握手建立连接的时候,双方会商量传输中MSS的大小;
(5)与UDP相同的是,分片越多数据丢包的可能性越大,可靠性也就越差。

【总结】:我们可以发现由于MTU的存在,对于传输的报文长度有限制而导致的分片,会增加数据丢包的可能性,也会降低数据传输的性能;所以在网络中传输数据时尽量将数据的大小控制在不造成分片的最大长度。

1.6以太网帧格式

常用的以太网MAC帧格式有两种标准 :DIX Ethernet II标准,IEEE 的 802.3 标准。

Ethernet V2可以装载的最大数据长度是1500字节,而IEEE802.3可以装载的最大数据是1492字节(SNAP)或是1497字节; Ethernet V2不提供MAC层的数据填充功能,而IEEE802.3不仅提供该功能,还具备服务访问点(SAP)和SNAP层,能够提供更有效的数据链路层控制和更好的传输保证。那么我们可以得出这样的结论:Ethernet V2比IEEE802.3更适合于传输大量的数据,但EthernetV2缺乏数据链路层的控制,不利于传输需要严格传输控制的数据,这也正是IEEE802.3的优势所在,越需要严格传输控制的应用,越需要用IEEE802.3或SNAP来封装,但IEEE802.3也不可避免的带来数据装载量的损失,因此该格式的封装往往用在较少数据量承载但又需要严格控制传输的应用中。

在实际应用中,我们会发现,大多数应用的以太网数据包是EthernetV2的帧(如HTTP、FTP、SMTP、POP3等应用),而交换机之间的BPDU(桥协议数据单元)数据包则是IEEE802.3的帧,VLANTrunk协议如802.1Q和Cisco的CDP(思科发现协议)等则是采用IEEE802.3SNAP的帧。大家有兴趣的话,可以利用Sniffer等协议分析工具去捕捉数据包,然后解码查看是不是这样的。

gKbTUJ.png

Related posts

Leave a Comment